package leetCode;

import java.util.*;

/**
 * 989. 数组形式的整数加法
 *
 整数的 数组形式 num是按照从左到右的顺序表示其数字的数组。

 例如，对于 num = 1321 ，数组形式是 [1,3,2,1] 。
 给定 num ，整数的 数组形式 ，和整数 k ，返回 整数 num + k 的 数组形式 。

 示例 1：
 输入：num = [1,2,0,0], k = 34
 输出：[1,2,3,4]
 解释：1200 + 34 = 1234

 示例 2：
 输入：num = [2,7,4], k = 181
 输出：[4,5,5]
 解释：274 + 181 = 455

 示例 3：
 输入：num = [2,1,5], k = 806
 输出：[1,0,2,1]
 解释：215 + 806 = 1021

 提示：
 1 <= num.length <= 104
 0 <= num[i] <= 9
 num不包含任何前导零，除了零本身
 1 <= k <= 104
 */
public class AddArrayFormOfInteger {
    public static void main(String[] args) {
        addToArrayForm(new int[]{1,2,0,0}, 34);
    }

    //双指针，进位标识，倒序集合，80/25
    public static List<Integer> addToArrayForm(int[] num, int k) {
        int i = num.length -1;
        int j = String.valueOf(k).length() -1;
        boolean flag = false;
        List<Integer> res = new ArrayList<>();
        while (i >=0 || j >= 0 || flag) {
            int x = i >= 0 ? num[i] : 0;
            int y = j >= 0 ? String.valueOf(k).charAt(j) - '0' : 0;
            i--;
            j--;
            int sum = (x + y + (flag ? 1 : 0));
            res.add(sum % 10);
            flag = sum >= 10 ? true : false;
        }
        Collections.reverse(res);
        return res;
    }
}
